home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2004 #11 / Amiga Plus CD - 2004 - No. 11.iso / AmiSoft / Comm / www / tidy_os4.lha / tidy / src / tags.h < prev    next >
C/C++ Source or Header  |  2004-07-25  |  9KB  |  228 lines

  1. #ifndef __TAGS_H__
  2. #define __TAGS_H__
  3.  
  4. /* tags.h -- recognize HTML tags
  5.  
  6.   (c) 1998-2003 (W3C) MIT, ERCIM, Keio University
  7.   See tidy.h for the copyright notice.
  8.  
  9.   CVS Info :
  10.  
  11.     $Author: hoehrmann $ 
  12.     $Date: 2003/05/24 23:32:51 $ 
  13.     $Revision: 1.10 $ 
  14.  
  15.   The HTML tags are stored as 8 bit ASCII strings.
  16.   Use lookupw() to find a tag given a wide char string.
  17.  
  18. */
  19.  
  20. #include "forward.h"
  21. #include "attrdict.h"
  22.  
  23. typedef void (Parser)( TidyDocImpl* doc, Node *node, uint mode );
  24. typedef void (CheckAttribs)( TidyDocImpl* doc, Node *node );
  25.  
  26. /*
  27.  Tag dictionary node
  28. */
  29.  
  30. /* types of tags that the user can define */
  31. #define tagtype_empty     1
  32. #define tagtype_inline    2
  33. #define tagtype_block     4
  34. #define tagtype_pre       8
  35.  
  36. struct _Dict
  37. {
  38.     TidyTagId       id;
  39.     tmbstr          name;
  40.     uint            versions;
  41.     AttrVersion*    attrvers;
  42.     uint            model;
  43.     Parser*         parser;
  44.     CheckAttribs*   chkattrs;
  45.     Dict*           next;
  46. };
  47.  
  48. #ifdef ELEMENT_HASH_LOOKUP
  49. #define ELEMENT_HASH_SIZE 178
  50. #endif
  51.  
  52. struct _TidyTagImpl
  53. {
  54.     Dict* xml_tags;                /* placeholder for all xml tags */
  55.     Dict* declared_tag_list;       /* User declared tags */
  56. #ifdef ELEMENT_HASH_LOOKUP
  57.     Dict* hashtab[ELEMENT_HASH_SIZE];
  58. #endif
  59. };
  60.  
  61. typedef struct _TidyTagImpl TidyTagImpl;
  62.  
  63. /* interface for finding tag by name */
  64. const Dict* LookupTagDef( TidyTagId tid );
  65. Bool    FindTag( TidyDocImpl* doc, Node *node );
  66. Parser* FindParser( TidyDocImpl* doc, Node *node );
  67. void    DefineTag( TidyDocImpl* doc, int tagType, ctmbstr name );
  68. void    FreeDeclaredTags( TidyDocImpl* doc, int tagType ); /* 0 to free all */
  69.  
  70. TidyIterator   GetDeclaredTagList( TidyDocImpl* doc );
  71. Dict*          GetNextDeclaredDict( TidyDocImpl* doc, TidyIterator* iter );
  72. ctmbstr        GetNextDeclaredTag( TidyDocImpl* doc, int tagType,
  73.                                    TidyIterator* iter );
  74.  
  75. void InitTags( TidyDocImpl* doc );
  76. void FreeTags( TidyDocImpl* doc );
  77.  
  78.  
  79. /* Parser methods for tags */
  80.  
  81. Parser ParseHTML;
  82. Parser ParseHead;
  83. Parser ParseTitle;
  84. Parser ParseScript;
  85. Parser ParseFrameSet;
  86. Parser ParseNoFrames;
  87. Parser ParseBody;
  88. Parser ParsePre;
  89. Parser ParseList;
  90. Parser ParseLI;
  91. Parser ParseDefList;
  92. Parser ParseBlock;
  93. Parser ParseInline;
  94. Parser ParseEmpty;
  95. Parser ParseTableTag;
  96. Parser ParseColGroup;
  97. Parser ParseRowGroup;
  98. Parser ParseRow;
  99. Parser ParseSelect;
  100. Parser ParseOptGroup;
  101. Parser ParseText;
  102. Parser ParseObject;
  103. Parser ParseMap;
  104.  
  105. /* Attribute checking methods */
  106.  
  107. CheckAttribs CheckAttributes;
  108. CheckAttribs CheckIMG;
  109. CheckAttribs CheckLINK;
  110. CheckAttribs CheckAREA;
  111. CheckAttribs CheckTABLE;
  112. CheckAttribs CheckCaption;
  113. CheckAttribs CheckSCRIPT;
  114. CheckAttribs CheckSTYLE;
  115. CheckAttribs CheckHTML;
  116. CheckAttribs CheckFORM;
  117. CheckAttribs CheckMETA;
  118.  
  119. /* 0 == TidyTag_UNKNOWN */
  120. #define TagId(node)        ((node) && (node)->tag ? (node)->tag->id : TidyTag_UNKNOWN)
  121. #define TagIsId(node, tid) ((node) && (node)->tag && (node)->tag->id == tid)
  122.  
  123. Bool nodeIsText( Node* node );
  124. Bool nodeIsElement( Node* node );
  125.  
  126. Bool nodeHasText( TidyDocImpl* doc, Node* node );
  127.  
  128. /* Compare & result to operand.  If equal, then all bits
  129. ** requested are set.
  130. */
  131. Bool nodeMatchCM( Node* node, uint contentModel );
  132.  
  133. /* True if any of the bits requested are set.
  134. */
  135. Bool nodeHasCM( Node* node, uint contentModel );
  136.  
  137. Bool nodeCMIsBlock( Node* node );
  138. Bool nodeCMIsInline( Node* node );
  139. Bool nodeCMIsEmpty( Node* node );
  140.  
  141.  
  142. Bool nodeIsHeader( Node* node );     /* H1, H2, ..., H6 */
  143. uint nodeHeaderLevel( Node* node );  /* 1, 2, ..., 6 */
  144.  
  145. #define nodeIsHTML( node )       TagIsId( node, TidyTag_HTML )
  146. #define nodeIsHEAD( node )       TagIsId( node, TidyTag_HEAD )
  147. #define nodeIsTITLE( node )      TagIsId( node, TidyTag_TITLE )
  148. #define nodeIsBASE( node )       TagIsId( node, TidyTag_BASE )
  149. #define nodeIsMETA( node )       TagIsId( node, TidyTag_META )
  150. #define nodeIsBODY( node )       TagIsId( node, TidyTag_BODY )
  151. #define nodeIsFRAMESET( node )   TagIsId( node, TidyTag_FRAMESET )
  152. #define nodeIsFRAME( node )      TagIsId( node, TidyTag_FRAME )
  153. #define nodeIsIFRAME( node )     TagIsId( node, TidyTag_IFRAME )
  154. #define nodeIsNOFRAMES( node )   TagIsId( node, TidyTag_NOFRAMES )
  155. #define nodeIsHR( node )         TagIsId( node, TidyTag_HR )
  156. #define nodeIsH1( node )         TagIsId( node, TidyTag_H1 )
  157. #define nodeIsH2( node )         TagIsId( node, TidyTag_H2 )
  158. #define nodeIsPRE( node )        TagIsId( node, TidyTag_PRE )
  159. #define nodeIsLISTING( node )    TagIsId( node, TidyTag_LISTING )
  160. #define nodeIsP( node )          TagIsId( node, TidyTag_P )
  161. #define nodeIsUL( node )         TagIsId( node, TidyTag_UL )
  162. #define nodeIsOL( node )         TagIsId( node, TidyTag_OL )
  163. #define nodeIsDL( node )         TagIsId( node, TidyTag_DL )
  164. #define nodeIsDIR( node )        TagIsId( node, TidyTag_DIR )
  165. #define nodeIsLI( node )         TagIsId( node, TidyTag_LI )
  166. #define nodeIsDT( node )         TagIsId( node, TidyTag_DT )
  167. #define nodeIsDD( node )         TagIsId( node, TidyTag_DD )
  168. #define nodeIsTABLE( node )      TagIsId( node, TidyTag_TABLE )
  169. #define nodeIsCAPTION( node )    TagIsId( node, TidyTag_CAPTION )
  170. #define nodeIsTD( node )         TagIsId( node, TidyTag_TD )
  171. #define nodeIsTH( node )         TagIsId( node, TidyTag_TH )
  172. #define nodeIsTR( node )         TagIsId( node, TidyTag_TR )
  173. #define nodeIsCOL( node )        TagIsId( node, TidyTag_COL )
  174. #define nodeIsCOLGROUP( node )   TagIsId( node, TidyTag_COLGROUP )
  175. #define nodeIsBR( node )         TagIsId( node, TidyTag_BR )
  176. #define nodeIsA( node )          TagIsId( node, TidyTag_A )
  177. #define nodeIsLINK( node )       TagIsId( node, TidyTag_LINK )
  178. #define nodeIsB( node )          TagIsId( node, TidyTag_B )
  179. #define nodeIsI( node )          TagIsId( node, TidyTag_I )
  180. #define nodeIsSTRONG( node )     TagIsId( node, TidyTag_STRONG )
  181. #define nodeIsEM( node )         TagIsId( node, TidyTag_EM )
  182. #define nodeIsBIG( node )        TagIsId( node, TidyTag_BIG )
  183. #define nodeIsSMALL( node )      TagIsId( node, TidyTag_SMALL )
  184. #define nodeIsPARAM( node )      TagIsId( node, TidyTag_PARAM )
  185. #define nodeIsOPTION( node )     TagIsId( node, TidyTag_OPTION )
  186. #define nodeIsOPTGROUP( node )   TagIsId( node, TidyTag_OPTGROUP )
  187. #define nodeIsIMG( node )        TagIsId( node, TidyTag_IMG )
  188. #define nodeIsMAP( node )        TagIsId( node, TidyTag_MAP )
  189. #define nodeIsAREA( node )       TagIsId( node, TidyTag_AREA )
  190. #define nodeIsNOBR( node )       TagIsId( node, TidyTag_NOBR )
  191. #define nodeIsWBR( node )        TagIsId( node, TidyTag_WBR )
  192. #define nodeIsFONT( node )       TagIsId( node, TidyTag_FONT )
  193. #define nodeIsLAYER( node )      TagIsId( node, TidyTag_LAYER )
  194. #define nodeIsSPACER( node )     TagIsId( node, TidyTag_SPACER )
  195. #define nodeIsCENTER( node )     TagIsId( node, TidyTag_CENTER )
  196. #define nodeIsSTYLE( node )      TagIsId( node, TidyTag_STYLE )
  197. #define nodeIsSCRIPT( node )     TagIsId( node, TidyTag_SCRIPT )
  198. #define nodeIsNOSCRIPT( node )   TagIsId( node, TidyTag_NOSCRIPT )
  199. #define nodeIsFORM( node )       TagIsId( node, TidyTag_FORM )
  200. #define nodeIsTEXTAREA( node )   TagIsId( node, TidyTag_TEXTAREA )
  201. #define nodeIsBLOCKQUOTE( node ) TagIsId( node, TidyTag_BLOCKQUOTE )
  202. #define nodeIsAPPLET( node )     TagIsId( node, TidyTag_APPLET )
  203. #define nodeIsOBJECT( node )     TagIsId( node, TidyTag_OBJECT )
  204. #define nodeIsDIV( node )        TagIsId( node, TidyTag_DIV )
  205. #define nodeIsSPAN( node )       TagIsId( node, TidyTag_SPAN )
  206. #define nodeIsINPUT( node )      TagIsId( node, TidyTag_INPUT )
  207. #define nodeIsQ( node )          TagIsId( node, TidyTag_Q )
  208. #define nodeIsLABEL( node )      TagIsId( node, TidyTag_LABEL )
  209. #define nodeIsH3( node )         TagIsId( node, TidyTag_H3 )
  210. #define nodeIsH4( node )         TagIsId( node, TidyTag_H4 )
  211. #define nodeIsH5( node )         TagIsId( node, TidyTag_H5 )
  212. #define nodeIsH6( node )         TagIsId( node, TidyTag_H6 )
  213. #define nodeIsADDRESS( node )    TagIsId( node, TidyTag_ADDRESS )
  214. #define nodeIsXMP( node )        TagIsId( node, TidyTag_XMP )
  215. #define nodeIsSELECT( node )     TagIsId( node, TidyTag_SELECT )
  216. #define nodeIsBLINK( node )      TagIsId( node, TidyTag_BLINK )
  217. #define nodeIsMARQUEE( node )    TagIsId( node, TidyTag_MARQUEE )
  218. #define nodeIsEMBED( node )      TagIsId( node, TidyTag_EMBED )
  219. #define nodeIsBASEFONT( node )   TagIsId( node, TidyTag_BASEFONT )
  220. #define nodeIsISINDEX( node )    TagIsId( node, TidyTag_ISINDEX )
  221. #define nodeIsS( node )          TagIsId( node, TidyTag_S )
  222. #define nodeIsSTRIKE( node )     TagIsId( node, TidyTag_STRIKE )
  223. #define nodeIsU( node )          TagIsId( node, TidyTag_U )
  224. #define nodeIsMENU( node )       TagIsId( node, TidyTag_MENU )
  225.  
  226.  
  227. #endif /* __TAGS_H__ */
  228.